// src/main/java/com/example/daibanshiwu/controller/PersonalCenterController.java
package com.example.daibanshiwu.controller;

import com.example.daibanshiwu.Service.PersonalCenterService;
import com.example.daibanshiwu.pojo.PasswordChangeDTO;
import com.example.daibanshiwu.pojo.Result;
import com.example.daibanshiwu.pojo.TUser;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/personal_center")
public class PersonalCenterController {

    // 【推荐】使用构造器注入
    private final PersonalCenterService personalCenterService;

    public PersonalCenterController(PersonalCenterService personalCenterService) {
        this.personalCenterService = personalCenterService;
    }

    /**
     * 获取当前登录用户的基本信息
     * @param userId 从请求参数中获取的用户ID
     * @return Result 包含用户信息的响应对象
     */
//    @GetMapping("/info")
//    public Result getUserInfo(@RequestParam("userId") Integer userId) {
//        // 【修改 1】: Service现在返回一个列表
//        List<TUser> userList = personalCenterService.getUserInfo(userId);
//
//        // 【修改 2】: 遍历列表，清除每个用户的密码信息，保证安全
//        if (userList != null && !userList.isEmpty()) {
//            //userList.forEach(user -> user.setPassword(null));
//        }
//
//        // 【修改 3】: 将处理后的列表封装到Result对象中返回
//        return Result.success(userList);
//    }

    /**
     * 更新用户基本信息
     * @param user 从请求体中获取的用户新信息
     * @return Result 操作成功或失败的响应
     */
    @PutMapping("/profile")
    public Result saveProfile(@RequestBody TUser user) {
        // 在真实项目中，用户ID应从安全上下文(如Token/Session)中获取
        // 这里为了演示，我们假设前端必须传递正确的userId
        // 如果不传，需要添加校验或依赖安全框架
        personalCenterService.updateUserProfile(user);
        return Result.success();
    }

    /**
     * 修改密码
     * @param passwordData 包含当前密码和新密码的对象
     * @return Result 操作成功或失败的响应
     */
    @PostMapping("/password")
    public Result changePassword(@RequestBody TUser user) {
        try {
            // 在真实项目中，用户ID应从安全上下文获取
            Integer currentUserId = 1; // 假设当前登录的用户ID是1
            personalCenterService.changeUserPassword(user);
            return Result.success();
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        }
    }
}
